package com.margo.project.web.mvcconfig.argumentresolver;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebArgumentResolver;
import org.springframework.web.context.request.NativeWebRequest;

/**
 * https://www.javatang.com/archives/2018/07/18/54152474.html
 * 在resolveArgument方法中当对象的类型不是指定的类型的时候，必须返回 WebArgumentResolver.UNRESOLVED而不是null，
 * 否则下一个参数解析器无法执行。
 * 
 * 如果参数解析器是通过实现WebArgumentResolver接口创建的话，
 * 其中的resolveArgument方法会在 <mvc:interceptors>...</mvc:interceptors> 中定义的过滤器之后执行。
 * Spring 3.1之后增加一个HandlerMethodArgumentResolver接口，该接口的方法是在过滤器之后执行的，
 * 并且resolveArgument方法可以返回null，不会造成上面的问题。
 * 因此，后面可以使用 HandlerMethodArgumentResolver 完全替代 WebArgumentResolver 接口
 * @author fangxingbang
 *
 */
public class MargoWebArgumentResolver implements WebArgumentResolver{

	@Override
	public Object resolveArgument(MethodParameter methodParameter, NativeWebRequest webRequest) throws Exception {
		System.out.println(methodParameter.getParameterName());
		System.out.println( webRequest.getParameter("date"));
		if (methodParameter.getParameterType().equals(Date.class)) {
			Date argu = new Date();
	        SimpleDateFormat myDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
	        return myDateFormat.format(argu);
		}
		return UNRESOLVED;
	}

}
